\documentclass[a4paper, oneside, 11pt]{article}
\usepackage[a4paper, vmargin=1.0cm, top=0.5cm, bottom=2.0cm, headsep=1.0cm, nofoot ]{geometry}
\usepackage[utf8]{inputenc}      			% kodowanie literek
\usepackage[polish]{babel}				% reguy dla jzyka polskiego
\usepackage[OT4]{fontenc}				% adne czcionki w~PDFie
\usepackage{polski}					% polski
\usepackage{indentfirst} 				% wcicia pierwszego akapitu
\usepackage{anysize}
\usepackage[usenames,dvipsnames]{color}
\usepackage{colortbl}
\usepackage{wrapfig} 					% oblewanie rysunkw tekstem
\usepackage{sidecap}
\usepackage{array}
\usepackage{fancyhdr}
\usepackage[pdftex]{graphicx} 				% doczanie obrazkw - tryb pdftex
\usepackage{hyperref}
\usepackage{setspace}
\usepackage{tabularx}

\begin{document}
\author{Piotr Kalański, Marcin Kubacki}
\title{Sprawozdanie z projektu z WPAM}
\date{}
\maketitle

\onehalfspacing

\section*{Cel projektu}
Celem projektu było stworzenie aplikacji mobilnej działającej pod kontrolą systemu Android do celów raportowania o nazwie \emph{MobileReports}. Aplikacja umożliwia pobranie listy dostępnych raportów z zewnętrznego systemu. Program \emph{MobileReports} umożliwia przeglądanie danych z możliwością zwijania/rozwijania względem ustalonej przez użytkownika hierarchii.

\section*{Realizacja}

Po uruchomieniu aplikacji zostaje wyświetlona lista raportów. Lista ta pobierana jest z zewnętrznej aplikacji w postaci plików XML zwracanych po odpowiednim żądaniu typu GET z adresem URL \verb+http://<host>:8080/<app_name>/fetchReports.htm+. Plik parsowany jest następnie przez warstwę klienta za pomocą standardowej biblioteki Java. Widok początkowy przedstawiony jest na rysunku \ref{reports}.

\begin{figure}[h]
	\centering
	\includegraphics[width=0.4\textwidth]{raporty.png}
	\caption{Widok wyboru raportu}
	\label{reports}	
\end{figure}

Po wybraniu raportu otworzony zostanie ekran przedstawiony na rysunku \ref{columns}. Po lewej stronie znajduje się lista wszystkich dostępnych kolumn w raporcie. Po wybraniu kolumny z lewej listy, jest ona dodawana na końcu listy wybranych kolumn. Druga lista zwiera hierarchię grupowania, względem której dane będą zwijane/rozwijane podczas generowania wykresu.

\begin{figure}[h]
	\centering
	\includegraphics[width=0.4\textwidth]{kolumny.png}
	\caption{Widok wyboru kolumn}
	\label{columns}	
\end{figure}

Po naciśnięciu przycisku \emph{Plot} zostanie wyświetlony wykres (rys. \ref{chart}). W trakcie realizacji projektu zadbano przyjazny interfejs użytkownika, bogaty w animacje oraz starannie dobrane kolory, których barwa jest zależna od wartości prezentowanej przez dany słupek. Dodatkowo zastosowanie cieni i antaliasingu poprawia czytelność wykresu. Wyróżniono pięć grup wartości słupka:
\begin{itemize}
	\item \emph{górny kwartyl} - kolor niebieski
	\item \emph{zakres pomiędzy medianą a górnym kwartylem} - kolor zielony
	\item \emph{mediana} - kolor fioletowy, przy czym słupek oznaczony jako mediana występuje tylko wtedy, gdy liczba słupków jest nieparzysta
	\item \emph{zakres pomiędzy medianą a dolnym kwartylem} - kolor żółty
	\item \emph{dolny kwartyl} - kolor czerwony
\end{itemize}

\begin{figure}[h]
	\centering
	\includegraphics[width=0.4\textwidth]{wykres.png}
	\caption{Wygenerowany wykres}
	\label{chart}	
\end{figure}

Po pojedynczym zaznaczeniu słupka zostanie od podświetlony. Ponowne wybranie spowoduje rozwinięcie danych i wyświetlenie poziomu niżej hierarchii grupowania. Po naciśnięciu przycisku \emph{Drill up} zostanie wykonana operacja odwrotna, czyli zwinięcie danych i powrót do poziomu wyżej. Użytkownik ma możliwość wyboru miernika, który jest wyświetlany na wykresie, do tego celu jest używana dedykowana lista możliwych mierników. Aplikacja pozwala na sortowanie słupków według wartości malejąco i rosnąco oraz według kolejności alfabetycznej etykiet. W przypadku, gdy wszystkie słupki nie mieszczą się na ekranie wyświetlacza komórki użytkownika ma możliwość przewinięcia wykresu w dół. Operacja ta została zaimplementowana samodzielnie poprzez metodę \emph{onTouch}.

\section*{Podsumowanie}

W trakcie realizacji projektu zdobyliśmy wiedzę na temat tworzenia aplikacji na platformę Android. Dzięki możliwości użycia języka Java, sam proces tworzenia aplikacji nie wymagał nauki nowego języka programowania, a jedynie zaznajomienia się z dokumentacją platformy Android. Najwięcej problemów napotkano przy synchronizacji dostępu do wątku rysującego wykres. Wystarczyło pojedyncze niedopatrzenie w równoczesnym zapisie współdzielonych zmiennych, aby znalezienie faktycznej przyczyny błędu było bardzo trudne. W projekcie zrealizowano wszystkie postawione wcześniej cele, jak realizacja komunikacji sieciowej z zewnętrzną aplikacją i rysowanie czytelnych dla użytkownika i przyjemnych w odbiorze wykresów.

\end{document}